// 统一 API 客户端：配置基础地址、拦截器；后续与后端对接
import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建 Axios 实例并设置基础配置
const client = axios.create({
  baseURL: '/api',
  timeout: 10000
})

// 请求拦截器：除登录接口外，自动附加 Authorization 头（从 localStorage 读取完整 token）
client.interceptors.request.use(cfg => {
  try {
    const isLogin = cfg.url?.includes('/user/login')
    if (!isLogin) {
      // 支持从 localStorage 或 sessionStorage 读取 token（记住我）
      const token = localStorage.getItem('token') || sessionStorage.getItem('token')
      if (token) {
        cfg.headers = cfg.headers || {}
        cfg.headers['Authorization'] = token // 后端已返回完整 "Bearer ..."，无需拼接
      }
    }
  } catch (e) {
    console.warn('token attach error:', e)
  }
  return cfg
})

// 响应拦截器：统一处理业务 code，401 等未授权清理并跳转登录
client.interceptors.response.use(
  resp => {
    const data = resp.data
    // 约定后端返回 { code, message, data }
    if (data && typeof data.code !== 'undefined') {
      // 未授权/过期
      if (data.code === 401) {
        ElMessage.error('登录已过期，请重新登录')
        localStorage.removeItem('token')
        localStorage.removeItem('username')
        localStorage.removeItem('userId')
        sessionStorage.removeItem('token')
        sessionStorage.removeItem('username')
        sessionStorage.removeItem('userId')
        // 跳转到登录页
        window.location.href = '/login'
        return Promise.reject(new Error(data.message || '未授权'))
      }
      return data
    }
    return data
  },
  err => {
    // 网络或服务端错误
    console.error('API Error:', err)
    const status = err?.response?.status
    if (status === 401) {
      ElMessage.error('登录已过期，请重新登录')
      localStorage.removeItem('token')
      localStorage.removeItem('username')
      localStorage.removeItem('userId')
      sessionStorage.removeItem('token')
      sessionStorage.removeItem('username')
      sessionStorage.removeItem('userId')
      window.location.href = '/login'
    }
    return Promise.reject(err)
  }
)

export default client